Tinker 源码解析
Tinker 的官方介绍:
Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新.
tinker 加载补丁
从应用启动开始分析,TinkerApplication 的 onBaseContextAttached() -> loadTinker() -> TinkerLoader 类的 tryLoad() -> tryLoadPatchFilesInternal() 方法:
|
|
简单总结这个长方法的工作:
一系列检查: tinker是否开启、tinker文件夹是否存在、patch.info文件是否存在
通过patch.info校验patch有效性,决定是否加载patch
- 补丁包校验:校验签名、tinkerId是否与基准包一致
- 加载dex、resource补丁
另外,要强调的是:tinker文件夹是在执行合成的时候生成的。
tinker 合成补丁
用户主动调用 onReceiveUpgradePatch 方法,传入补丁路径:
|
|
DefaultPatchListener.java:
|
|
看一下 TinkerPatchService 类:
|
|
doApplyPatch 方法调用了 UpgradePatch 的 tryPatch 方法:
|
|
参考链接:热修复框架 - TinkerApplication启动(一) - 初始化过程
接下来的文章会分别详细介绍资源、dex、so库的拆分、合成与加载。